<?php

/**
 * Servicio form.
 *
 * @package    cronos-doctrine
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class ServicioForm extends BaseServicioForm
{
  public function configure()
  {
      
      $this->removeField();
      
      $this->widgetSchema['empresa_id'] = new sfWidgetFormInputHidden(array(),array('value'=> sfContext::getInstance()->getUser()->getAttribute('agente_user_empresa_id')));
      
      //Lista todas las Categorias Padres (Estetica, Nutricion y Veterinario)
      $categoria = new Categoria();
      $this->widgetSchema['servicio_tipo_id'] = new sfWidgetFormInputHidden();
      // Fin
           
       if($this->isNew){
           //Lista todas las Categorias Hijas de la categoria padre seleccionado "ninguna" para empezar
            $this->categoriaSelect();
            //Lista todos los Productos que tengan realcion con  la categoria Seleccionada
            $this->productoSelect();
      }else {
          $sevice = $this->getObject();
          $this->categoriaSelect($sevice->getServicioTipoId());
          $this->productoSelect($sevice->getCategoriaId(), $sevice->getProducto()->getMarcaId(), $sevice->getTamanoId(), $sevice->getProductoId() );
      }
      
      // Lista todas las mascotas disponible para el cliente seleccionado
      $this->widgetSchema['mascota_list'] = new sfWidgetFormDoctrineChoice(array(
          'multiple' => true, 
          'model' => 'Mascota', 
          'expanded' => true, 
          'query' => Doctrine_Query::create()->select('u.id, u.nombre')->from('Mascota u')-> where('usuario_id=?', $this->getObject()->getAgendado()->getUsuarioId()),
          ), array ('onchange' => 'servUpdate(this)','class' => 'servMac'));
      $this->widgetSchema['mascota_list']->setLabel('Mascotas');
      
      $this->widgetSchema['servicio_status_id'] =  new sfWidgetFormInputHidden(array(),array('value' => 1));
      
      $this->widgetSchema['precio'] =  new sfWidgetFormInputHidden(array(),array());
      $this->widgetSchema['impuestos'] =  new sfWidgetFormInputHidden(array(),array());
      $this->widgetSchema['puntos'] =  new sfWidgetFormInputHidden(array(),array());
      
      
      
  }
  
  // Funcion para el listar las categorias hijas de una categoria padre seleccionada defaul=0
  public function categoriaSelect($servicio_tipo_id = 0){
      
      $categoria = new Categoria();
      //Lista las categorias hijas relacionada con categoria padre diferente a NULL
      if($servicio_tipo_id){               
          $this->widgetSchema['categoria_id'] = new sfWidgetFormDoctrineChoice(array(
                        'model'     => 'Categoria',
                        'query'    => $categoria->getCategoriaPadre($servicio_tipo_id),
                        'add_empty' => 'Seleccione',
        ), array ('onchange' => 'servUpdate(this)'));
      
      //No lista ninguna Categoria hija porque no se ha seleccionado ninguna padre
      }else {
          $this->widgetSchema['categoria_id'] = new sfWidgetFormChoice(array(
          'expanded' => false,
          'multiple' => false, 
          'choices' => array('Seleccione')
         ), array ('onchange' => 'servUpdate(this)'));
      }
      
      //Mantiene el valor de la categoria padre seleccionada
      $this->setDefault('servicio_tipo_id', $servicio_tipo_id);
  }
  
  //Funcion para listar los productos de alguna categoria seleccionada
  public function productoSelect($categoria_id=0, $marca_id=0, $tamano_id = 0, $producto_id=0, $presentacion_id=0, $mascota_list_Array = array()) {
      
      //Lista los productos de una categoria hija seleccionada diferente a NULL
      if($categoria_id){   
          $categoria = new Categoria();
          $categoria = $categoria->getCategoriaPorId($categoria_id);
          
          // en caso de que el tipo de producto sea un servicio lista los producto, sin marca ni tamaño
          if($categoria->getTipoId()==2) { 
              $this->productoList($categoria_id);
              //Elimina la marca
              $this->widgetSchema['marca_id'] =  new sfWidgetFormInputHidden(array(),array());
              //Elimina el Tamaño
              $this->widgetSchema['tamano_id'] =  new sfWidgetFormInputHidden(array(),array()); 
              $this->widgetSchema['cantidad'] =  new sfWidgetFormInputHidden(array(),array());
              $this->widgetSchema['presentacion_id'] = new sfWidgetFormInputHidden(array(),array());
          }
          
          //En caso de que el tipo de producto sea un producto lista los productos , con la marca y el tamaño
          if($categoria->getTipoId()==1){      
              
              
              $this->marcaSelect($marca_id);
              $this->productoList($categoria_id, $marca_id);
              $this->tamanoSelect($producto_id, $tamano_id);
              $this->presentacionSelect($producto_id, $presentacion_id);
              
              //Coloca en widget cantidad con un tamaño pequeño de 5 
              for($si=1;$si<=30;$si++) $datos_cantidad[$si] = $si;
              
           $this->widgetSchema['cantidad'] = new sfWidgetFormChoice(array(
                                            'expanded' => false,
                                            'multiple' => false,
                                            'choices' => $datos_cantidad
                                            ), array('onchange' => 'servUpdate(this)'));
                            
          }
          $this->setDefault('categoria_id', $categoria_id);
          
      } else {
          $this->widgetSchema['producto_id'] = new sfWidgetFormChoice(array(
                    'expanded' => false,
                    'multiple' => false, 
                    'choices' => array('Seleccione')
         ), array ('onchange' => 'servUpdate(this)'));
          
           $this->widgetSchema['marca_id'] =  new sfWidgetFormInputHidden(array(),array());
           $this->widgetSchema['tamano_id'] =  new sfWidgetFormInputHidden(array(),array());
           $this->widgetSchema['cantidad'] =  new sfWidgetFormInputHidden(array(),array());
           $this->widgetSchema['presentacion_id'] = new sfWidgetFormInputHidden(array(),array());
           
      }
      $mascota_list_array =  array();
      for($i=0;$i<=count($mascota_list_Array);$i++){
        if(!empty($mascota_list_Array[$i])) {  
        $mascota_list_array[] =  $mascota_list_Array[$i];
            
        }
      }
    $this->setDefault('mascota_list', $mascota_list_array);
     
       
     
      $this->validatorSchema['marca_id'] = new sfValidatorPass();
      $this->validatorSchema['presentacion_id'] = new sfValidatorPass();
  }
  
  public function  marcaSelect($marca_id=0){      
      $this->widgetSchema['marca_id'] = new sfWidgetFormDoctrineChoice(array(
                            'model'     => 'Marca',
                            'add_empty' => 'General',              
      ), array ('onchange' => 'servUpdate(this)'));
      $this->setDefault('marca_id', $marca_id);
  }
  
  public function  tamanoSelect($producto_id, $tamano_id=0){
      $tamano = $this->getObject()->getProducto()->getTable()->getProductoTamano($producto_id);
      if($tamano) {
       $this->widgetSchema['tamano_id'] = new sfWidgetFormChoice(array(
          'expanded' => false,
          'multiple' => false, 
          'choices' => $tamano
         ), array ('onchange' => 'servUpdate(this)'));
       
      $this->setDefault('tamano_id', $tamano_id);}
      else {
          $this->widgetSchema['tamano_id'] =  new sfWidgetFormInputHidden(array(),array());
      }
  }
  
  public function  presentacionSelect($producto_id=0, $presentacion_id){      
      $tamano = $this->getObject()->getProducto()->getTable()->getProductoPresentacion($producto_id);
      $this->widgetSchema['presentacion_id'] = new sfWidgetFormChoice(array(
          'expanded' => false,
          'multiple' => false, 
          'choices' => $tamano
         ), array ('onchange' => 'servUpdate(this)'));
      
      $this->setDefault('presentacion_id', $presentacion_id);
 }
  
  
  
  
  public function  productoList($categoria_id=0, $marca_id=0){
     
      $productos = $this->getObject()->getProducto()->getTable()->getProductoCategoria($categoria_id, $marca_id);
      $this->widgetSchema['producto_id'] = new sfWidgetFormDoctrineChoice(array(
                'model'     => 'Producto',
                'query'    => $productos, 
                'add_empty' => 'Seleccione'
                
      ), array ('onchange' => 'servUpdate(this)'));     
      
  }


  protected function removeField() {
      //Eliminar los campos del formularios  created_at y updated_at      
      unset(
          $this['created_at'],
          $this['updated_at'],
          $this['agendado_id']
      );
  }
  
 
}
